package org.sam.swing;

import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JCheckBox;

/**
 * 
 * @author sam
 *
 */
public class JSCheckBox<V> extends JCheckBox implements Tag<V> {

	private static final long serialVersionUID = 2433479171269254701L;

	/**
	 * 绑定值
	 */
	private V tag;

	/**
	 * {@inheritDoc}
	 */
	@Override
	public V getTag() {
		return this.tag;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void setTag(V tag) {
		this.tag = tag;
	}

	/**
	 * 生成echeckbox
	 */
	public JSCheckBox() {
		this("", null, null, false);
	}
	
	/**
	 * {@inheritDoc}
	 * @param tag
	 */
	public JSCheckBox(V tag) {
		this(tag == null ? "" : tag.toString(), null, tag, false);
	}

	/**
	 * {@inheritDoc}
	 * @param a
	 */
	public JSCheckBox(Action a) {
		this();
		setAction(a);
	}

	public JSCheckBox(Icon icon, V tag, boolean selected) {
		this(tag == null ? "" : tag.toString(), icon, tag, selected);
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @param icon
	 */
	public JSCheckBox(Icon icon, V tag) {
		this(tag == null ? "" : tag.toString(), icon, tag, false);
	}

	/**
	 * 带有绑定值和显示值的checkbox
	 * 
	 * @param text     显示值
	 * @param tag      绑定值
	 * @param selected 是否选中
	 */
	public JSCheckBox(String text, V tag, boolean selected) {
		this(text, null, tag, selected);
	}

	/**
	 * 带有绑定值和显示值的checkbox
	 * 
	 * @param text 显示内容
	 * @param icon 图标
	 * @param tag  绑定值
	 */
	public JSCheckBox(String text, Icon icon, V tag) {
		this(text, icon, tag, false);
	}

	/**
	 * 绑定值和显示值的checkbox
	 * 
	 * @param text 显示值
	 * @param tag  绑定值
	 */
	public JSCheckBox(String text, V tag) {
		this(text, null, tag, false);
	}

	/**
	 * 生成代用绑定值和显示值的checkbox
	 * 
	 * @param text     显示值
	 * @param icon     图标
	 * @param tag      绑定值
	 * @param selected 是否选中
	 */
	public JSCheckBox(String text, Icon icon, V tag, boolean selected) {
		super(text, icon, selected);
		this.setTag(tag);
		setBorderPainted(false);
		setHorizontalAlignment(LEADING);
	}

}
